fetcher: Drop max queue size assertion in libsoup/libcurl backends
authorColin Walters <walters@verbum.org>
Wed, 14 Feb 2018 20:28:17 +0000 (15:28 -0500)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 14 Feb 2018 23:15:09 +0000 (23:15 +0000)
Since f4d1334e19ce3ab2f8872b1e28da52044f559401 the primary pull code maintains a
maximum queue. In that commit message I said `Note that I kept an assertion.`.
But I think this is wrong since while it covers a lot of the normal cases, if
one is e.g. trying to fetch a ton of refs, the primary pull code doesn't yet
queue those.  While it'd be nice to queue those, it isn't worth carrying
extra assertions in the backends that can still trigger.

Closes: https://github.com/ostreedev/ostree/issues/1451
Closes: #1453
Approved by: dbnicholson

src/libostree/ostree-fetcher-curl.c
src/libostree/ostree-fetcher-soup.c

index b8677e23762aff50796d49fb79c28eab6bad73f2..c45142514816a1c64a155433fd2a957f7178a4c3 100644 (file)
@@ -866,12 +866,6 @@ _ostree_fetcher_request_async (OstreeFetcher         *self,
   initiate_next_curl_request (req, task);
 
   g_hash_table_add (self->outstanding_requests, g_steal_pointer (&task));
-
-  /* Sanity check, I added * 2 just so we don't abort if something odd happens,
-   * but we do want to abort if we're asked to do obviously too many requests.
-   */
-  g_assert_cmpint (g_hash_table_size (self->outstanding_requests), <,
-                   _OSTREE_MAX_OUTSTANDING_FETCHER_REQUESTS * 2);
 }
 
 void
index 3b829f6962bfa9a696d873fee138e898f590ff85..306e2534d49337c51715d759abbd126e67e9794b 100644 (file)
@@ -60,7 +60,6 @@ typedef struct {
   int base_tmpdir_dfd;
 
   GVariant *extra_headers;
-  int max_outstanding;
   gboolean transfer_gzip;
 
   /* Our active HTTP requests */
@@ -386,8 +385,6 @@ start_pending_request (ThreadClosure *thread_closure,
   OstreeFetcherPendingURI *pending;
   GCancellable *cancellable;
 
-  g_assert_cmpint (g_hash_table_size (thread_closure->outstanding), <, thread_closure->max_outstanding);
-
   pending = g_task_get_task_data (task);
   cancellable = g_task_get_cancellable (task);
 
@@ -473,7 +470,6 @@ ostree_fetcher_session_thread (gpointer data)
 {
   ThreadClosure *closure = data;
   g_autoptr(GMainContext) mainctx = g_main_context_ref (closure->main_context);
-  gint max_conns;
 
   /* This becomes the GMainContext that SoupSession schedules async
    * callbacks and emits signals from.  Make it the thread-default
@@ -494,17 +490,23 @@ ostree_fetcher_session_thread (gpointer data)
 
   /* XXX: Now that we have mirrorlist support, we could make this even smarter
    * by spreading requests across mirrors. */
+  gint max_conns;
   g_object_get (closure->session, "max-conns-per-host", &max_conns, NULL);
   if (max_conns < _OSTREE_MAX_OUTSTANDING_FETCHER_REQUESTS)
     {
       /* We download a lot of small objects in ostree, so this
-       * helps a lot.  Also matches what most modern browsers do. */
+       * helps a lot.  Also matches what most modern browsers do.
+       *
+       * Note since https://github.com/ostreedev/ostree/commit/f4d1334e19ce3ab2f8872b1e28da52044f559401
+       * we don't do queuing in this libsoup backend, but we still
+       * want to override libsoup's currently conservative
+       * #define SOUP_SESSION_MAX_CONNS_PER_HOST_DEFAULT 2 (as of 2018-02-14).
+       */
       max_conns = _OSTREE_MAX_OUTSTANDING_FETCHER_REQUESTS;
       g_object_set (closure->session,
                     "max-conns-per-host",
                     max_conns, NULL);
     }
-  closure->max_outstanding = 3 * max_conns;
 
   /* This model ensures we don't hit a race using g_main_loop_quit();
    * see also what pull_termination_condition() in ostree-repo-pull.c